#ifndef CELL_H
#define CELL_H

// #include "core_lib_export.h"

#include <vector>
#include "vector3d.h"
#include "material.h"

// 由2个或更多顶点(Vector3D)定义的形状
class Cell
{
  protected:
    // 定义单元格的顶点
    std::vector<Vector3D> vertices;

    // 单元格所使用的材料
    Material material;

  public:
    Cell();
    ~Cell();

    // 访问器
    // 获取单元格的体积
    virtual double getVolume();

    // 获取单元格的质量
    double getMass();

    // 以std::vector<Vector3D>形式获取单元格的顶点
    std::vector<Vector3D> getVertices();

    // 根据顶点获取单元格的重心
    Vector3D getCentre();

    // 获取单元格的材料
    Material getMaterial();
};

// 金字塔单元格，由5个顶点定义
class Pyramid : public Cell
{
  public:
    Pyramid();
    Pyramid(std::vector<Vector3D>& vertices, Material& material);
    ~Pyramid();

    // 访问器
    virtual double getVolume();
};

// 六面体单元格，由8个顶点定义
class Hexahedron : public Cell
{
  public:
    Hexahedron();
    Hexahedron(std::vector<Vector3D>& vertices, Material& material);
    ~Hexahedron();

    // 访问器
    virtual double getVolume();
};

// 四面体单元格，由4个顶点定义
class Tetrahedron : public Cell
{
  public:
    Tetrahedron();
    Tetrahedron(std::vector<Vector3D>& vertices, Material& material);
    ~Tetrahedron();

    // 访问器
    virtual double getVolume();
};

#endif /* CELL_H */